package com.lecture.java8.file;

import cn.hutool.core.net.NetUtil;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PathValidator {
    private static final String PATH_REGEX = "^(?!.*([*><|?\"]|\\./|\\\\\\.|/\\./|\\\\\\.\\\\|/\\.\\.|\\\\\\.\\.))[a-zA-Z0-9./-_ ]+$";




    public static boolean isValidPath(String path) {
        Pattern pattern = Pattern.compile(PATH_REGEX);
        Matcher matcher = pattern.matcher(path);
        return matcher.matches();
    }

    public static void main(String[] args) {
        // 示例路径
        String[] paths = {
                "/home/user/docs/file.txt", // 合法（文件）
                "/var/log",                  // 合法（目录）
                "/etc/ssh/sshd_config",      // 合法（文件）
                "/usr/local/bin/script.sh",  // 合法（文件）
                "/tmp/",                     // 合法（目录）
                "/",                         // 合法（根目录）

                "/home//user/docs/file.txt", // 不合法（包含多余的 `/`）
                "/var/log/../log/syslog",    // 不合法（包含 `..`）
                "/home/user/./docs/file.txt",// 不合法（包含 `.`）
                "/etc/ssh/sshd_config/",     // 不合法（路径末尾包含 `/`，如果期望为文件）
                "/usr/local/bin//script.sh", // 不合法（包含多余的 `/`）
                "/home/user/filename.txt/",  // 不合法（路径末尾包含 `/`，如果期望为文件）
                "/tmp/..",                   // 不合法（包含 `..`）
                "/invalid\\path/"            // 不合法（包含反斜杠 `\`）
        };
        String[] testPaths = {
                "C:\\Users\\JohnDoe\\Documents\\file.txt", // 合法
                "D:\\Program Files\\App\\app.exe",         // 合法
                "E:\\Data\\Backup\\",                      // 合法（目录）
                "C:\\",                                    // 合法（根目录）
                "C:\\invalid|path",                        // 不合法（包含非法字符 `|`）
                "C:\\invalid*path",                        // 不合法（包含非法字符 `*`）
                "C:\\invalid:path",                        // 不合法（包含非法字符 `:`）
                "C:\\invalid?path",                        // 不合法（包含非法字符 `?`）
                "C:\\invalid<path>",                       // 不合法（包含非法字符 `<`）
                "C:\\invalid>path",                        // 不合法（包含非法字符 `>`）
                "C:\\invalid\"path",                       // 不合法（包含非法字符 `"`）
                "C:\\invalid/path",                        // 不合法（包含非法字符 `/`）
                "C:\\invalid\npath",                       // 不合法（包含换行符 `\n`）
                "C:\\invalid\rpath",                       // 不合法（包含回车符 `\r`）
                "C:\\invalid*path?|"                     // 不合法（包含非法字符 `?` 和 `|`）
        };

        // 校验路径
        for (String path : testPaths) {
            System.out.println("Path: " + path + " is valid: " + isValidPath(path));
        }


        File file = FileUtils.getFile("C:\\Users\\72879\\Documents\\WeChat Files\\wxid_bdikx7q2lx2822\\FileStorage\\File\\2024-08\\2024年秋季安全知识考试题库\\信息专业\\通用部分\\18-安全工作规定.xls");
        System.out.println(file.length());



        System.out.println(NetUtil.localIps());
    }
}
